<?php

namespace Forms;

use Phalcon\Forms\Form;
use Phalcon\Forms\Element\Text;
use Phalcon\Forms\Element\TextArea;
use Phalcon\Forms\Element\Hidden;
use Phalcon\Forms\Element\Password;
use Phalcon\Forms\Element\Submit;
use Phalcon\Forms\Element\Check;
use Phalcon\Forms\Element\Select;
use Phalcon\Validation\Validator\PresenceOf;
use Phalcon\Validation\Validator\Email;
use Phalcon\Validation\Validator\Identical;
use Phalcon\Validation\Validator\StringLength;
use Phalcon\Validation\Validator\Confirmation;
use Models\Doctypes;
use Models\Topics;
use Models\Display;

class SearchForm extends Form {

    public function initialize($entity = null, $options = null) {
        $text = new Text('text');
        $this->add($text);
        // Lọc trạng thái
        $state = array(
            '1' => 'Chưa trả lời',
            '2' => 'Đã trả lời'
        );
        $state_filter = new Select('state', $state, array(
            'using' => array('key', 'value'),
            'useEmpty' => true,
            'emptyText' => 'Tất cả trạng thái',
            'emptyValue' => '',
        ));
        $this->add($state_filter);
        // Lọc thời gian
        $time = array(
            '1' => 'Trong ngày',
            '2' => 'Trong tuần',
            '3' => 'Trong tháng'
        );
        $time_filter = new Select('time', $time, array(
            'using' => array('key', 'value'),
            'useEmpty' => true,
            'emptyText' => 'Hiện tất cả ngày',
            'emptyValue' => '',
        ));
        $this->add($time_filter);
        // Lọc thành viên
        $role_filter = new Select('role', \Models\Roles::find(), array(
            'using' => array('id', 'name'),
            'useEmpty' => true,
            'emptyText' => 'Hiện all user',
            'emptyValue' => '',
        ));
        $this->add($role_filter);
        // Lọc loại tài liệu
        $doctype_filter = new Select('doctype', Doctypes::find(), array(
            'using' => array('id', 'name'),
            'useEmpty' => true,
            'emptyText' => 'Chọn loại tài liệu',
            'emptyValue' => '',
        ));
        $this->add($doctype_filter);
        // Lọc chủ đề
        $topics_filter = new Select('topic', Topics::find(), array(
            'using' => array('id', 'name'),
            'useEmpty' => true,
            'emptyText' => 'Chọn đề tài',
            'emptyValue' => 0
        ));
        $this->add($topics_filter);
        // Phân trang
        $page_pagination = new Hidden('page');
        $this->add($page_pagination);

        $orderby_pagination = new Hidden('orderby');
        $this->add($orderby_pagination);

        $display = new Select('limit', Display::find(), array(
            'using' => array('value', 'value'),
            'useEmpty' => false,
        ));
        $this->add($display);


        // CSRF
        $csrf = new Hidden('csrf');
        $csrf->addValidator(new Identical(array(
            'value' => $this->security->getSessionToken(),
            'message' => 'CSRF validation failed'
        )));

        $this->add($csrf);
    }

    /**
     * Prints messages for a specific element
     */
    public function messages($name) {
        if ($this->hasMessagesFor($name)) {
            foreach ($this->getMessagesFor($name) as $message) {
                $this->flash->error($message);
            }
        }
    }

}
